package cn.tiger.repository;

import cn.tiger.pojo.domain.Message;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 消息数据访问层
 */
@Repository
public interface MessageRepository extends JpaRepository<Message, Long> {
    
    /**
     * 根据对话ID查询消息列表
     * @param conversationId 对话ID
     * @return 消息列表
     */
    List<Message> findByConversationIdOrderBySendTimeAsc(Long conversationId);
    
    /**
     * 根据对话ID和发送者类型查询消息
     * @param conversationId 对话ID
     * @param senderType 发送者类型
     * @return 消息列表
     */
    List<Message> findByConversationIdAndSenderTypeOrderBySendTimeAsc(Long conversationId, String senderType);
    
    /**
     * 统计对话中的消息数量
     * @param conversationId 对话ID
     * @return 消息数量
     */
    long countByConversationId(Long conversationId);
    
    /**
     * 统计对话中指定发送者类型的消息数量
     * @param conversationId 对话ID
     * @param senderType 发送者类型
     * @return 消息数量
     */
    long countByConversationIdAndSenderType(Long conversationId, String senderType);
    
    /**
     * 查询对话中的最后一条消息
     * @param conversationId 对话ID
     * @return 最后一条消息
     */
    @Query("SELECT m FROM Message m WHERE m.conversationId = :conversationId ORDER BY m.sendTime DESC LIMIT 1")
    Message findLastMessageByConversationId(@Param("conversationId") Long conversationId);
}
